// 对axios的二次封装
// 1. 基地址
// 2．最长等待时间
// 3．请求拦截器
// 4．响应拦截器

// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
import store from '@/store'
import router from '@/router'
const service = axios.create({
  // process.env：取环境变量，不同环境不同基地址
  // baseURL: process.env.VUE_APP_BASE_API, // 设置axios请求的基础的基础地址
  baseURL: 'http://localhost:8080/api', // 跨域问题解决，先把地址指向本机，然后在vue.config.js 指向远程服务器
  timeout: 5000 // 定义5秒超时
}) // 创建一个axios的实例

// 添加请求拦截器
service.interceptors.request.use(
  function(config) {
    // 在发送请求之前做些什么
    const token = store.state.user.token
    // 如果有token就带上
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
service.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么
    if (response.data.success === false) {
      // (1) 服务器返回false，操作失败，抛出错误
      return Promise.reject(response.data.message)
    } else {
      // (2) 操作成功,脱壳:去掉data
      return response.data
    }
  },
  function(error) {
    // 对响应错误做点什么
    if (error.response.data.code === 10002) {
      // token 超时，删除无效token
      // 1. 清空用户数据
      store.dispatch('user/logout')
      // 2. 跳转到login
      router.push(
        '/login?return_url=' + encodeURIComponent(router.currentRoute.fullPath)
      )
    }
    return Promise.reject(error)
  }
)
export default service // 导出axios实例
